struct ListNode {
  int val;
  ListNode *next;
  ListNode() : val(0), next(nullptr) {}
  ListNode(int x) : val(x), next(nullptr) {}
  ListNode(int x, ListNode *next) : val(x), next(next) {}
};

void swpaTwoNode(ListNode *&head) {
  if (head == nullptr || head->next == nullptr) {
    return;
  }
  ListNode *temp;
  temp = head;
  head = head->next;
  temp->next = head->next;
  head->next = temp;
  swpaTwoNode(head->next->next);
}

ListNode *swapPairs(ListNode *head) {
  swpaTwoNode(head);
  return head;
}